Introduction

The popularity of the MCU has had a significant impact on the Marvel Comics industry, which served as the inspiration for the films. The success of the MCU has led to increased interest in Marvel Comics. The MCU has also brought new life to classic characters and storylines, introducing them to a wider audience and introducing new fans to the world of Marvel Comics..

I intend to analyze Marvel Comics data from 2012 to 2019 of specific comic characters and compare these data to their respective Marvel Cinematic Universe (MCU) counterparts. To do this, I gather data on the comic characters during this time period, including sales figures, the number of issues released. I’ll be examining the effect of movie releases on comic book sales

Method

To accurately analyze such data, I conduct several statistical regressions. I use the method of difference-in-differences (DID). This statistical method involves comparing the difference between two groups before and after an intervention was experienced by one of the groups. I examine comic revenue pre-film release, and comic revenue post-film release both for characters that the movie was about and for the characters that the movie does not involve. By using DID, I attempt to isolate the effect of the intervention.

Data

I collect monthly comic book sales data from 2012 till 2019 which is featured on https://www.comichron.com/monthlycomicssales.html. My focus is on Marvel published titles, I have cleaned the data to exclude any non-Marvel comic books. I analyzed the sales trends of a particular set of characters, including Spider-Man, the Avengers, Silver Surfer, Nova, Hulk, Sentry, Venom, Doctor Strange, Iron Man, Captain Marvel, Black Panther, Thor, Ant-Man, Captain America, and Hawkeye.

I compile a sum of units sold/ revenue for each character, organized by year and month. This will allow me to track the popularity of each character over time and identify any trends or changes in their sales. I used similar methods MCU data which is featured on https://www.the-numbers.com/movies/franchise/Marvel-Cinematic-Universe#tab=summary, however the revenue was world wide box office revenue and kept the sum to individual movies.

“The code for such cleaning is featured in a seperate r-script file”

Hypothesis

I hypothesize that with every Marvel Cinematic Universe (MCU) character release, their respective comic book counterpart’s comic sales revenue would increase. This hypothesis is based on the idea that the release of an MCU film featuring a particular character could lead to increased interest in and exposure for that character, which could in turn drive up the demand for the character’s comic books. If the hypothesis is supported, it could suggest that the release of an MCU film can have a positive impact on the sales of a character’s comic books. However, it is important to consider other factors that could also influence comic sales, such as changes in the comics industry or the popularity of competing characters or storylines.

 

# Load in MCU Data
MCU = read.csv("MCU_chart.csv")

#Remove unnecessary rows
MCU = MCU[-(2),]

MCU = MCU[-(31:34),]

# Remove Un-necessary Columns
MCU = MCU[,-(1:2)]

MCU_DATES = as.Date(c("2022-11-11","2022-07-8",
              "2022-05-6","2021-12-17","2021-11-05",
              "2021-09-03","2021-07-09","2019-07-02",
              "2019-04-26","2019-03-08", "2018-07-06",
              "2018-04-27","2018-02-16","2017-11-03",
              "2017-07-07","2017-05-05","2016-11-04",
              "2016-05-06","2015-07-17","2015-05-01",
              "2014-08-01","2014-04-04","2013-11-08",
              "2013-05-03","2012-05-04","2011-07-22",
              "2011-05-06","2010-05-07","2008-06-13",
              "2008-05-02"))

# Make date numeric
MCU$Release_Date = MCU_DATES


# Remove commas so that there is no NA coearcion
MCU$Worldwide.Box.Office = (gsub(",","",MCU$Worldwide.Box.Office))

# Remove dollar sign so that there is no NA coercion
MCU$Worldwide.Box.Office = 
  (gsub("\\$","",MCU$Worldwide.Box.Office))

MCU$Worldwide.Box.Office = as.numeric(MCU$Worldwide.Box.Office)

# Rename
colnames(MCU)[2] <- "World_Wide_Box_Office_Sales"

# MCU$Total_Rev_Average = $926,895,523
# 
# MCU$Total_Revenue = $27,806,865,684

MCU (Marvel cinematic Universe) Revenue

 

Below is a plot showcasing MCU Revenue per film for each individual charatcter

 

# Plot 
plot3 <- plot_ly(full_MCU, type = 'scatter', mode = 'lines+markers')%>%
  add_trace(data = select(full_MCU, 
        c(Release_Date,MCU_ant_Revenue)) %>% na.omit(),
            x = ~Release_Date,y = ~MCU_ant_Revenue, name = 'Ant-Man') %>%
  add_trace(
    data = select(
      full_MCU, 
      c(Release_Date, MCU_panther_Revenue)) %>% na.omit(),
            x = ~Release_Date, 
    y = ~MCU_panther_Revenue, name = 'Black Panther') %>%
  add_trace(
    data = select(
      full_MCU, 
      c(Release_Date, MCU_spider_Revenue)) %>% na.omit(),
            x = ~Release_Date, 
    y = ~MCU_spider_Revenue, name = 'Spider-Man') %>%
  add_trace(
    data = 
      select(
        full_MCU, 
        c(Release_Date, MCU_marvel_Revenue)) %>% na.omit(),
            x = ~Release_Date, 
    y = ~MCU_marvel_Revenue, name = 'Captain Marvel') %>%
  add_trace(
    data = 
      select(
        full_MCU, 
        c(Release_Date, MCU_IM_Revenue)) %>% na.omit(),
            x = ~Release_Date, 
    y = ~MCU_IM_Revenue, name = "Iron Man") %>%
  add_trace(
    data = 
      select(
        full_MCU,
        c(Release_Date, MCU_america_Revenue)) %>% na.omit(),
            x = ~Release_Date,
            y = ~MCU_america_Revenue, name = "Captain America")%>%
  add_trace(
    data =
      select(
        full_MCU,
        c(Release_Date, MCU_Hulk_Revenue)) %>% na.omit(),
    x = ~Release_Date,
    y = ~MCU_Hulk_Revenue, name = "Hulk Franchise") %>%
  add_trace(
    data = 
      select(
        full_MCU,
        c(Release_Date, MCU_avengers_Revenue)) %>% na.omit(),
    x = ~Release_Date,
    y = ~MCU_avengers_Revenue, name = "Avengers")%>%
  add_trace(
    data = 
      select(
        full_MCU,
        c(Release_Date, MCU_thor_Revenue)) %>% na.omit(),
    x = ~Release_Date,
    y = ~MCU_thor_Revenue, name = "Thor") %>%
  add_trace(
    data = 
      select(
        full_MCU,
        c(Release_Date, MCU_DS_Revenue)) %>%na.omit(),
    x = ~Release_Date, 
    y = ~MCU_DS_Revenue, name = "Doctor Strange") %>%
  layout(title = 'MCU Movie Revenue',
         legend=list(title=list(text='variable')),
         xaxis = list(title = "Date"),
         yaxis = list(title = "Revenue ($)"), width = 1000)
options(warn = -1)

###
plot3 <- plot3 %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6')

plot3
# Spider-Man

Spider_man_c_2 = Spider_man_c[,-2]

colnames(Spider_man_c_2)[2] = "Revenue"

Spider_man_c_2["spider_man"] <- 1

## Avengers
avengers_c_2 = avengers_c[,-2]

colnames(avengers_c_2)[2] = "Revenue"

avengers_c_2["avengers"] <- 1

# Captain America
c_america_c_2 = c_america_c[,-2]

colnames(c_america_c_2)[2] = "Revenue"

c_america_c_2["captain_america"] <- 1


# Doctor strange
DS_c_2 = DS_c[,-2]

colnames(DS_c_2)[2] = "Revenue"

DS_c_2["doctor_strange"] <- 1


# Venom
Venom_c_2 = Venom_c[,-2]

colnames(Venom_c_2)[2] = "Revenue"

Venom_c_2["venom"] <- 1

# Thor
Thor_c_2 = Thor_c[,-2]

colnames(Thor_c_2)[2] = "Revenue"

Thor_c_2["thor"] <- 1

# Iron Man
IM_c_2 = IM_c[,-2]

colnames(IM_c_2)[2] = "Revenue"

IM_c_2["iron_man"] <- 1

# Hawkeye 
H_E_c_2 = H_E_c[,-2]

colnames(H_E_c_2)[2] = "Revenue"

H_E_c_2["hawkeye"] <- 1

# Hulk
Hulk_c_2 = Hulk_c[,-2]

colnames(Hulk_c_2)[2] = "Revenue"

Hulk_c_2["hulk"] <- 1

# Captain Marvel
captain_marvel_c_2 = captain_marvel_c[,-2]

colnames(captain_marvel_c_2)[2] = "Revenue"

captain_marvel_c_2["captain_marvel"] <- 1

# Black Panther
black_panther_c_2 = black_panther_c[,-2]

colnames(black_panther_c_2)[2] = "Revenue"

black_panther_c_2["black_panther"] <- 1

# Ant Man
ant_man_c_2 = ant_man_c[,-2]

colnames(ant_man_c_2)[2] = "Revenue"

ant_man_c_2["ant_man"] <- 1

#### 
## Some control heroes
# Nova
nova_c_2 = nova_c[,-2]

colnames(nova_c_2)[2] = "Revenue"

nova_c_2["nova"] <- 1

# Sentry
sentry_c_2 = sentry_c[,-2]

colnames(sentry_c_2)[2] = "Revenue"

sentry_c_2["sentry"] <- 1

# Silver Surfer
silver_surfer_c_2 = silver_surfer_c[,-2]

colnames(silver_surfer_c_2)[2] = "Revenue"

silver_surfer_c_2["silver_surfer"] <- 1

full_character_2 = 
  dplyr::bind_rows(Spider_man_c_2, avengers_c_2, c_america_c_2,
                 DS_c_2, Venom_c_2, Thor_c_2, IM_c_2, H_E_c_2,
                 Hulk_c_2, captain_marvel_c_2, black_panther_c_2,
                 ant_man_c_2, nova_c_2, sentry_c_2, 
                 silver_surfer_c_2)

# full_character_mix <- reshape2::melt(full_character_2,
#                            id.var = c('day', 'Revenue'),
#                            variable.name = 'character')
# 
# full_character_mix = full_character_mix[,-1]


# Make NA register as 0 
full_character_2[is.na(full_character_2)] = 0

 

Marvel Comics Revenue 2012-2019)

 

Below is a plot showcasing monthly individual comic book character revenue

 

# Plot_ly

plot <- plot_ly(full_character, type = 'scatter',
          mode="lines") %>%
  add_trace(x = ~day, y = ~ant_man_Revenue, 
            name = 'Ant-Man')%>%
  add_trace(x = ~day, y = ~black_panther_Revenue, 
            name = 'Black Panther')%>%
  add_trace(x = ~day, y = ~Spider_man_Revenue, 
            name = 'Spider-Man')%>% 
  add_trace(x = ~day, y = ~captain_marvel_Revenue, 
            name = 'Captain Marvel')%>%
  add_trace(x = ~day, y = ~IM_Revenue, 
            name = "Iron Man")%>%
  add_trace(x = ~day, y = ~c_america_Revenue, 
            name = 'Captain America')%>%
  add_trace(x = ~day, y = ~Hulk_Revenue,
            name = "Hulk Franchise")%>%
  add_trace(x = ~day, y = ~avengers_Revenue,
            name = "Avengers")%>%
  add_trace(x= ~day, y = ~Thor_Revenue, 
            name = "Thor")%>%
    add_trace(x = ~day, y= ~DS_Revenue,
            name = "Doctor Strange")%>%
  add_trace(x = ~day, y = ~Venom_Revenue,
            name = "Venom")%>%
  add_trace(x = ~day, y = ~H_E_Revenue,
            name = "Hawkeye")%>%
    add_trace(x = ~day, y= ~sentry_Revenue,
            name = "Sentry")%>%
    add_trace(x = ~day, y= ~nova_Revenue,
            name = "Nova")%>%
    add_trace(x = ~day, y= ~silver_surfer_Revenue,
            name = "Silver Surfer")%>%
  layout(title = 'Individual Marvel Comic Character Revenue',
         legend=list(title=list(text='variable')),
         xaxis = list(title = "Date"),
         yaxis = list(title = "Revenue ($)"), width = 1000)
options(warn = -1)

###
plot <- plot %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6')

plot
# fig = subplot(plot, plot3,
#               titleY = TRUE, titleX = TRUE, margin = 0.1 )
# 
# fig = fig %>% 
#   layout(title = 'Side by Side Plot')
# 
# annotations = list( 
#   list(
#     x = 0.2,  
#     y = 1.0, 
#     text = "Marvel Comic Revenue (2012 - 2019)",  
#     xref = "paper",  
#     yref = "paper",  
#     xanchor = "center",  
#     yanchor = "bottom",  
#     showarrow = FALSE 
#   ),  
#   list(
#     x = 0.8,  
#     y = 1,  
#     text = "MCU Movie Revenue",  
#     xref = "paper",  
#     yref = "paper",  
#     xanchor = "center",  
#     yanchor = "bottom",  
#     showarrow = FALSE 
#   ))  
# 
# fig <- fig %>%layout(annotations = annotations) 
# 
# fig

 

The marvel comic revenue shows several random spikes that coincide with months before their respective MCU movies releases. This could potentially indicate that there is a strong correlation between the promotion of Marvel movies and an increase in comic book sales. It is possible that these spikes are due to increased marketing efforts and fan excitement leading up to the release of the movie, which leads to more people purchasing comics featuring the characters. Avengers: Age of Ultron can be seen as one of those cases , as there was no preexisting comic book revenue featuring the character before the release of the Avengers: Age of Ultron movie in 2015. This means that any spikes in comic book sales for Avengers: Age of Ultron are likely to be directly linked to the promotion and release of the movie. It is possible that the success of the movie led to an increase in demand for Avengers comics, leading to the publication of new material featuring the character. In either case, it is likely that the release of the Avengers: Age of Ultron movie had a significant impact on the sales of Avengers comics.

To isolate the potential effect of movie releases on comic book sales, I compare comic book sales of characters with feature films to those without them. In this case, Nova, Silver Surfer, and Sentry could be used as control variables because they have not had any MCU media and are not as popular as other Marvel characters. By including these characters in the analysis, it is possible to verify that the revenue spikes for other Marvel characters are not due to popularity or MCU media alone, but rather to the specific promotion and release of their respective movies. Of course, we have to take this tactic with a grain of salt, as Marvel characters that never reached the silver screen may have some un-observable qualities to them that may make them fundamentally different from those that did.

 

Some statistical evidence

 

After running a difference in difference analysis comparing pre-release and post-release data for Avengers second movie, the results demonstrate that post-release, comic book actually saw a decrease in comic book revenue. This suggests that the release of the movie did not have a positive effect on the sales of the associated comic books. It is possible that there were other factors at play that contributed to this decline in revenue, therefore potentially, after the movie release, the interest in comic books dies down as quite often, current comic book plot lines do not necessarily line up with that of the movies.

 

full_character_ultron =
  full_character_2 %>%
  mutate(treat_ultron = case_when(day >= as.Date("2015-05-01") ~
                                    '1',
                        day < as.Date("2015-05-01") ~ '0')) 

m1 = lm(Revenue ~ avengers + treat_ultron + avengers*treat_ultron, data = full_character_ultron)

stargazer(m1, type = 'html', header = F,
          dep.var.labels = c("Comic Revenue"),
          covariate.labels = c("Avengers: Age of Ultron", "Treatment Variable", "Post-Film Release"))
Dependent variable:
Comic Revenue
Avengers: Age of Ultron 1,571,606.000***
(77,987.150)
Treatment Variable 11,427.650
(33,143.630)
Post-Film Release -1,244,180.000***
(104,372.500)
Constant 349,305.500***
(26,252.200)
Observations 929
R2 0.326
Adjusted R2 0.324
Residual Std. Error 464,448.800 (df = 925)
F Statistic 149.312*** (df = 3; 925)
Note: p<0.1; p<0.05; p<0.01

 

Marvel Comic Estimated Units of Comics Sold (2012-2019)

 

Below is the plot of Marvel character estimated comic units sold

 

plot2 <- plot_ly(full_character, type = 'scatter', mode = 'lines')%>%
  add_trace(x = ~day, y = ~ant_man_Est_Unit, 
            name = 'Ant-Man')%>%
  add_trace(x = ~day, y = ~black_panther_Est_Unit, 
            name = 'Black Panther')%>%
  add_trace(x = ~day, y = ~Spider_man_Est_Unit, 
            name = 'Spider-Man')%>% 
  add_trace(x = ~day, y = ~captain_marvel_Est_Unit, 
            name = 'Captain Marvel')%>%
  add_trace(x = ~day, y = ~IM_Est_Unit, 
            name = "Iron Man")%>%
  add_trace(x = ~day, y = ~c_america_Est_Unit, 
            name = 'Captain America')%>%
  add_trace(x = ~day, y = ~Hulk_Est_Unit,
            name = "Hulk Franchise")%>%
  add_trace(x = ~day, y = ~avengers_Est_Unit,
            name = "Avengers")%>%
  add_trace(x= ~day, y = ~Thor_Est_Unit, 
            name = "Thor")%>%
    add_trace(x = ~day, y= ~DS_Est_Unit,
            name = "Doctor Strange")%>%
  add_trace(x = ~day, y = ~Venom_Est_Unit,
            name = "Venom")%>%
  add_trace(x = ~day, y = ~H_E_Est_Unit,
            name = "Hawkeye")%>%
      add_trace(x = ~day, y= ~sentry_Est_Unit,
            name = "Sentry")%>%
    add_trace(x = ~day, y= ~nova_Est_Unit,
            name = "Nova")%>%
    add_trace(x = ~day, y= ~silver_surfer_Est_Unit,
            name = "Silver Surfer")%>%
  layout(title = 'Marvel Character Estimated Units Sold',
         legend=list(title=list(text='variable')),
         xaxis = list(title = "Date"),
         yaxis = list(title = "Estimated Units Sold"), width = 1000)
options(warn = -1)

###
plot2 <- plot2 %>%
  layout(
         xaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         yaxis = list(zerolinecolor = '#ffff',
                      zerolinewidth = 2,
                      gridcolor = 'ffff'),
         plot_bgcolor='#e5ecf6')

plot2
#dplyr::bind_rows(dat1, dat2)

 

The estimated units sold parallel the revenue generated by their characters. It is important to note that other factors, such as the price of the comics and any discounts or promotions that may be offered, can also affect the overall revenue generated.

 

Some statistical evidence

 

It is also important to note that each MCU character impact on comic sales varies differently as Spider-man’s first MCU film raises his estimated units sold and his comic revenue

 

full_character_sm_1 =
  full_character_2 %>%
  mutate(treat_sm_1 = case_when(day >= as.Date("2017-07-01") ~
                                    '1',
                        day < as.Date("2017-07-01") ~ '0'))

m1 = lm(Revenue ~ spider_man + treat_sm_1 + spider_man*treat_sm_1, data = full_character_sm_1) 
# %>% summary()

stargazer(m1, type = 'html', header = F,
          dep.var.labels = c("Comic Revenue"),
          covariate.labels = c("Spider-Man", "Treatment Variable", "Post-Film Release"))
Dependent variable:
Comic Revenue
Spider-Man 889,043.600***
(60,797.950)
Treatment Variable -63,364.140*
(34,179.600)
Post-Film Release 571,372.500***
(112,998.600)
Constant 358,714.600***
(19,544.310)
Observations 929
R2 0.327
Adjusted R2 0.325
Residual Std. Error 464,151.600 (df = 925)
F Statistic 149.899*** (df = 3; 925)
Note: p<0.1; p<0.05; p<0.01

 

Although Avengers comic book sales had been steadily increasing on their own, when the movie made its debut on the big screen, there comic book revenue took a surprising dip. Despite the movie being a major success, the release seemed to have a negative impact on the sales of Avengers comic books. However Spider-Man’s first film in the Marvel Cinematic Universe (MCU) had a marginal impact on comic book revenue. This suggests that there are multiple factors at play when it comes to determining the sales and revenue of comic books, such as the popularity of the character and the success of the film. It highlights the need for further research to fully understand the relationship between cinematic adaptations and comic book sales.

 

Some more statiscal evidence

full_character_endgame =
  full_character_2 %>%
  mutate(treat_endgame = case_when(day >= as.Date("2019-04-01") ~
                                    '1',
                        day < as.Date("2019-04-01") ~ '0')) 

m1 = lm(Revenue  ~ avengers + avengers*treat_endgame,
          data = full_character_endgame ) 
# %>% summary()

stargazer(m1, type = 'html', header = F,
          dep.var.labels = c("Comic Revenue"),
          covariate.labels = c("Avengers: Endgame", "Treatment Variable", "Post-Film Release"))
Dependent variable:
Comic Revenue
Avengers: Endgame 925,353.600***
(57,320.530)
Treatment Variable 117,131.300
(73,533.870)
Post-Film Release -700,816.000***
(241,406.600)
Constant 349,642.400***
(17,760.120)
Observations 929
R2 0.221
Adjusted R2 0.218
Residual Std. Error 499,498.300 (df = 925)
F Statistic 87.340*** (df = 3; 925)
Note: p<0.1; p<0.05; p<0.01

 

However, the linear regression analysis suggests that Avenger comic revenue decreased post-release arguably the one of the most anticipated films of the year. This may suggest that the audience attracted to the MCU film may not enjoy the story-lines in the comics, leading to fewer comic book purchases. It is possible that there are differences in tone, style, or themes between the films and comics that cause this disconnect.

 

Conclusion

In conclusion, it can be seen that there are various factors that influence the relationship between Marvel Cinematic Universe (MCU) films and Marvel comic books. These include the adaptation of the comics into films, the different audiences that may be attracted to each medium, the concept of canon within the Marvel universe, the timing of the releases of each medium, and the tone of the films and comics. Understanding these factors can help better understand the dynamics between the films and comics and how to best engage both audiences.

Appendix

Dag showcasing possible confounding variable for comic revenue

g = dagitty("dag{
            POPULARITY -> MOVIE
            MOVIE -> REVENUE
            }")

coordinates(g) = list(x = c(POPULARITY = 0, MOVIE = 1, 
                            REVENUE = 3),
                      y = c(POPULARITY = 0, MOVIE = 1, 
                            REVENUE = 3))
plot(g)